// 注册自定义协议
const { app } = require('electron')
const path = require('path')
const fs = require("fs")

// 自定义协议名
const agreement = 'downloader-app';
const AGREEMENT_REGEXP = new RegExp(`^${agreement}://`);
// 注册自定义协议
function setDefaultProtocol() {
  let isSet = false // 是否注册成功
  // 验证是否为自定义协议的链接
  app.removeAsDefaultProtocolClient(agreement) // 每次运行都删除自定义协议 然后再重新注册
  // 开发模式下在window运行需要做兼容
  if (process.env.NODE_ENV === 'development' && process.platform === 'win32') {
    // 设置electron.exe 和 app的路径
    isSet = app.setAsDefaultProtocolClient(agreement, process.execPath, [
      path.resolve(process.argv[1]),
    ])
  } else {
    isSet = app.setAsDefaultProtocolClient(agreement)
  }
}
// 监听自定义协议打开
function handleProtocolLink(link) {
  // 处理自定义协议传递的参数，例如 download-app://213321
  const param = link.split(`${agreement}://`)[1]; // 提取协议后面的参数
  // 这里可以根据参数进行相应的处理，如打开特定窗口、加载页面等
  const configJsonPath = path.join(app.getAppPath(), "..", "config.json")
  const content = fs.readFileSync(configJsonPath)
  const config = JSON.parse(content)
  if (param && config.http_baseUrl !== param) {
    config.http_baseUrl = param
    // 将修改后的对象转换为 JSON 字符串
    const newData = JSON.stringify(config, null, 2); // null 和 2 使 JSON 更加可读
    fs.writeFileSync(configJsonPath, newData)
  }
}

// 处理命令行参数中的自定义协议链接
function checkForProtocolLink() {
  const protocolLink = process.argv.find(arg => AGREEMENT_REGEXP.test(arg));
  if (protocolLink) {
    // handleProtocolLink(protocolLink);
  }
}
module.exports = { setDefaultProtocol, handleProtocolLink, checkForProtocolLink }